﻿using System;
using System.Linq;
using CTS.Com.Domain.Constants;
using CTS.Com.Domain.Helper;
using CTS.Data.Domain.Dao;
using CTS.W._150101.Models.Domain.Common.Dao;
using CTS.W._150101.Models.Domain.Object.Admin.ItemTypes;
using CTS.Web.Com.Domain.Helper;

namespace CTS.W._150101.Models.Domain.Dao.Admin
{
    /// <summary>
    /// MasterItemTypesEntryDao
    /// </summary>
    public class MasterItemTypesEntryDao : GenericDao<EntitiesDataContext>
    {
        // Định nghĩa hằng file sql
        public const string MASTERITEMTYPESENTRYDAO_GETINFO_SQL = "MasterItemTypesEntryDao_GetInfo.sql";

        /// <summary>
        /// Lấy thông tin loại sản phẩm
        /// </summary>
        public ItemTypeObject GetInfo(string localeCd, string typeCd)
        {
            // Tạo tham số
            var param = new {
                LocaleCd = localeCd,
                TypeCd = typeCd
            };
            // Kết quả trả về
            return GetObjectByFile<ItemTypeObject>(MASTERITEMTYPESENTRYDAO_GETINFO_SQL, param);
        }

        /// <summary>
        /// Kiểm tra tồn tại loại sản phẩm
        /// </summary>
        public bool IsExist(string localeCd, string typeCd)
        {
            var linq = from tbl in EntityManager.MAItemTypes
                       where tbl.LocaleCd == localeCd
                       && tbl.TypeCd == typeCd
                       select tbl;
            var count = linq.Count();
            return count == decimal.One;
        }

        /// <summary>
        /// Kiểm tra tồn tại tên loại sản phẩm
        /// </summary>
        public bool IsUnique(string typeCd, string typeSearchName)
        {
            var linq = from tbl in EntityManager.MAItemTypes
                       where tbl.TypeCd != typeCd
                       && tbl.TypeSearchName == typeSearchName
                       select tbl;
            var count = linq.Count();
            return count != decimal.One;
        }

        /// <summary>
        /// Thêm loại sản phẩm
        /// </summary>
        public void Insert(ItemTypeObject data)
        {
            var entity = GetMAItemType(data);
            entity.LocaleCd = Logics.LOCALE_DEFAULT;
            entity.VersionNo = decimal.One;
            entity.CreateUser = WebContextHelper.UserName;
            entity.CreateDate = DateTime.Now;
            entity.UpdateUser = WebContextHelper.UserName;
            entity.UpdateDate = DateTime.Now;
            EntityManager.MAItemTypes.InsertOnSubmit(entity);
        }

        /// <summary>
        /// Cập nhật loại sản phẩm
        /// </summary>
        public void Update(ItemTypeObject data)
        {
            var linq = from tbl in EntityManager.MAItemTypes
                       where tbl.LocaleCd == data.LocaleCd
                       && tbl.TypeCd == data.TypeCd
                       select tbl;
            var entity = linq.Single();
            // Cập nhật thông tin
            if (!DataCheckHelper.IsNull(data.TypeName)) {
                entity.TypeName = data.TypeName;
            }
            if (!DataCheckHelper.IsNull(data.TypeSearchName)) {
                entity.TypeSearchName = data.TypeSearchName;
            }
            if (!DataCheckHelper.IsNull(data.CategoryCd)) {
                entity.CategoryCd = data.CategoryCd;
            }
            if (!DataCheckHelper.IsNull(data.SortKey)) {
                entity.SortKey = data.SortKey;
            }
            if (!DataCheckHelper.IsNull(data.DeleteFlag)) {
                entity.DeleteFlag = data.DeleteFlag;
            }
            entity.VersionNo = entity.VersionNo + decimal.One;
            entity.UpdateUser = WebContextHelper.UserName;
            entity.UpdateDate = DateTime.Now;
        }

        /// <summary>
        /// Khởi tạo đối tượng loại sản phẩm
        /// </summary>
        public MAItemType GetMAItemType(ItemTypeObject data)
        {
            // Khởi tạo biến cục bộ
            var result = DataHelper.CopyObject<MAItemType>(data);
            // Kết quả trả về
            return result;
        }
    }
}
